package org.wang.generalcode.modules.sys.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.wang.generalcode.modules.sys.converter.DictConverter;
import org.wang.generalcode.modules.sys.converter.DictItemConverter;
import org.wang.generalcode.modules.sys.mapper.DictMapper;
import org.wang.generalcode.modules.sys.pojo.model.Option;
import org.wang.generalcode.modules.sys.pojo.params.DictPageParams;
import org.wang.generalcode.modules.sys.pojo.entity.Dict;
import org.wang.generalcode.modules.sys.pojo.entity.DictItem;
import org.wang.generalcode.modules.sys.pojo.vo.DictVO;
import org.wang.generalcode.modules.sys.service.IDictItemService;
import org.wang.generalcode.modules.sys.service.IDictService;

import java.util.List;

/**
 * 字典类型表 服务实现类
 *
 * @author wz
 * @since 2024-08-08
 */
@Service
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements IDictService {

	@Resource
	private IDictItemService dictItemService;
	@Resource
	private DictConverter dictConverter;
	@Resource
	private DictItemConverter dictItemConverter;

	@Override
	public IPage<DictVO> selectDictPage(IPage<DictVO> page, DictPageParams dict) {
		return page.setRecords(baseMapper.selectDictPage(page, dict));
	}

	@Override
	public List<Option<Long>> listDictItemsByCode(String code) {
		// 根据字典编码获取字典ID
		Dict dict = this.getOne(new LambdaQueryWrapper<Dict>()
				.eq(Dict::getCode, code)
				.select(Dict::getId)
				.last("limit 1")
		);
		// 如果字典不存在，则返回空集合
		if (dict == null) {
			return CollectionUtil.newArrayList();
		}

		// 获取字典项
		List<DictItem> dictItems = dictItemService.list(
				new LambdaQueryWrapper<DictItem>()
						.eq(DictItem::getDictId, dict.getId())
		);

		// 转换为 Option
		return dictItemConverter.convertToOption(dictItems);
	}

}
